package com.ly.algorithm.leetcode.dp;

/**
 * @Classname Problem70
 * @Description
 *
 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
 *
 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？
 *
 * 注意：给定 n 是一个正整数。
 *
 * 示例 1：
 *
 * 输入： 2
 * 输出： 2
 * 解释： 有两种方法可以爬到楼顶。
 * 1.  1 阶 + 1 阶
 * 2.  2 阶
 * 示例 2：
 *
 * 输入： 3
 * 输出： 3
 * 解释： 有三种方法可以爬到楼顶。
 * 1.  1 阶 + 1 阶 + 1 阶
 * 2.  1 阶 + 2 阶
 * 3.  2 阶 + 1 阶
 *
 *
 * @Date 2020/12/23 14:31
 * @Author 冷心影翼
 */
public class Problem70 {

	public static void main(String[] args) {
		Solution70 solution70 = new Solution70();
		System.out.println(solution70.climbStairs(5));
	}

}

class Solution70 {

	public int climbStairs(int n) {
		if(n == 1)
			return 1;
		if(n == 2)
			return 2;
		int[] dp = new int[n];
		dp[0] = 1;
		dp[1] = 2;
		for(int i=2;i<n;i++) {
			dp[i] = dp[i-1]+dp[i-2];
		}
		return dp[n-1];
	}
}
